package cn.example.demo.common.model.tree.factory;

import java.util.List;

/**
 * <p>
 * 树构建的抽象类，定义构建tree的基本步骤
 * </p>
 *
 * @author Lizuxian
 * @create 2021/8/26 23:11
 */
public interface AbstractTreeBuildFactory<T> {
    /**
     * 树节点构建整体过程
     *
     * @param nodes 被处理的节点集合
     * @return 被处理后的节点集合（带树形结构了）
     */
    List<T> doTreeBuild(List<T> nodes);

    /**
     * 平铺展开所有父节点
     *
     * @param nodes 被处理的节点集合
     * @return 被处理后的节点集合，父节点平铺展开
     */
    List<T> flattenParents(List<T> nodes);

    /**
     * 平铺展开所有子节点
     *
     * @param nodes 被处理的节点集合
     * @return 被处理后的节点集合，子节点平铺展开
     */
    List<T> flattenChildren(List<T> nodes);
}
